package com.ymx.darling.dialect;

import com.ymx.darling.dialect.keygenerator.JdbcKeyGenerator;
import com.ymx.darling.dialect.keygenerator.KeyGenerator;
import com.ymx.darling.bean.sql.BoundSql;
import com.ymx.darling.bean.sql.SqlStatement;

/**
 * 数据方言接口
 * @author 爱Java的小于
 */
public interface Dialect {
    /**
     * 返回数据库类型名 例如:mysql,oracle等
     * @return string
     */
    String getDataBaseType();

    /**
     * 分页处理
     * @param boundSql sql绑定类
     * @param pageNum 页码
     * @param pageSize 页大小
     */
    void paginate(BoundSql boundSql, int pageNum, int pageSize);

    /**
     * 截取指定条数的数据
     * @param statement sql参数封装类
     * @param limit 指定条数
     * @param offset 从第几行开始
     */
    void limit(SqlStatement statement, long limit, long offset);

    /**
     * 获取主键生成器
     * @return KeyGenerator
     */
    default KeyGenerator getKeyGenerator() {
        return new JdbcKeyGenerator();
    }

    /**
     * 截取指定长度的字符串
     * @param column 字段名
     * @param start 开始位置
     * @param length 长度
     * @return string
     */
    default String subString(String column, int start, int length) {
        return "SUBSTRING("+column+", "+start+", "+length+")";
    }

    default String _if(String condition, Object trueValue, Object falseValue) {
        return String.format("CASE WHEN %s THEN %s ELSE %s END", condition, trueValue, falseValue);
    }

    default String charLength(String column) {
        return "CHAR_LENGTH("+column+")";
    }

    default String currentDate() {
        return "CURRENT_DATE";
    }

    default String currentTime() {
        return "CURRENT_TIME";
    }

    default String currentTimestamp() {
        return "CURRENT_TIMESTAMP";
    }
}
